package br.com.hs.nfe.common.to;

import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import java.util.Date;

/**
 * Classe representação do certificado.
 * @author Ranlive Hrysyk
 */
public class CertificadoTO {

    private X509Certificate x509Certificate;
    private PrivateKey privateKey;
    private String cnpj;
    private Date dataValidadeInicio;
    private Date dataValidadeFim;
    private String autoridadeCertificadora;
    private String tipoCertificado;
    private String caminho;
    private String alias;
    private String assunto;

    /**
     * Certificado X509.
     */
    public X509Certificate getX509Certificate() {
        return x509Certificate;
    }

    /**
     * Informar o certificado X509.
     * @param x509Certificate Certificado X509
     */
    public void setX509Certificate(X509Certificate x509Certificate) {
        this.x509Certificate = x509Certificate;
    }

    /**
     * Chave Privada.
     */
    public PrivateKey getPrivateKey() {
        return privateKey;
    }

    /**
     * Informar a chave privada.
     * @param privateKey Chave Privada
     */
    public void setPrivateKey(PrivateKey privateKey) {
        this.privateKey = privateKey;
    }

    /**
     * CNPJ do Certificado.
     */
    public String getCNPJ() {
        return cnpj;
    }

    /**
     * Informar o CNPJ do certificado.
     * @param cnpj CNPJ do Certificado
     */
    public void setCNPJ(String cnpj) {
        this.cnpj = cnpj;
    }

    /**
     * Data de inicio de validade do certificado.
     */
    public Date getDataValidadeInicio() {
        return dataValidadeInicio;
    }

    /**
     * Informar a data de início de validade do certificado.
     * @param dataValidadeInicio Data de inicio de validade do certificado
     */
    public void setDataValidadeInicio(Date dataValidadeInicio) {
        this.dataValidadeInicio = dataValidadeInicio;
    }

    /**
     * Data final de validade do certificado.
     */
    public Date getDataValidadeFim() {
        return dataValidadeFim;
    }

    /**
     * Informar a data final de vaidade do certificado.
     * @param dataValidadeFim Data final de validade do certificado
     */
    public void setDataValidadeFim(Date dataValidadeFim) {
        this.dataValidadeFim = dataValidadeFim;
    }

    /**
     * Autoridade Certificadora do Certificado.
     */
    public String getAutoridadeCertificadora() {
        return autoridadeCertificadora;
    }

    /**
     * Informar a autoridade certificado do certificado.
     * @param autoridadeCertificadora Autoridade Certificadora do Certificado
     */
    public void setAutoridadeCertificadora(String autoridadeCertificadora) {
        this.autoridadeCertificadora = autoridadeCertificadora;
    }

    /**
     * Tipo de Certificado.
     */
    public String getTipoCertificado() {
        return tipoCertificado;
    }

    /**
     * Informar o tipo de certificado.
     * @param tipoCertificado Tipo de certificado
     */
    public void setTipoCertificado(String tipoCertificado) {
        this.tipoCertificado = tipoCertificado;
    }

    /**
     * Localização do certificado.
     */
    public String getCaminho() {
        return caminho;
    }

    /**
     * Infomar o caminho de localização do certificado.
     * @param caminho Localização do certificado
     */
    public void setCaminho(String caminho) {
        this.caminho = caminho;
    }

    /**
     * Apelido do certificado.
     */
    public String getAlias() {
        return alias;
    }

    /**
     * Infomar o apelido do certificado.
     * @param alias Apelido do certificado
     */
    public void setAlias(String alias) {
        this.alias = alias;
    }

    /**
     * Assunto.
     */
    public String getAssunto() {
        return assunto;
    }

    /**
     * Informar o assunto do certificado.
     * @param assunto Assunto
     */
    public void setAssunto(String assunto) {
        this.assunto = assunto;
    }

    @Override
    public String toString() {
        return x509Certificate != null ? x509Certificate.getSubjectDN().getName() : "";
    }
}
